package GameBoard;

import java.util.Vector;

import GameElements.Pawn;
import GameElements.PawnFactory;
import GameElements.PionSpecial;
import GameElements.Tile;
import GameElements.TileAubCath;
import GameElements.TileFactory;
import GameElements.Elements.Element;
import Player.Player;
import Utils.Point3D;


public class CarcassonneModelInnsandCathe extends BasicGameBoard {

	public CarcassonneModelInnsandCathe() {
		super();
	}

	//on ajoute 1 pion special
	public void distributePawn(Vector<Player> player) 
	{
		super.distributePawn(player);
		for(int i=0; i<player.size(); i++)
			player.get(i).addPawn(PawnFactory.getInstance().createPawn("special", i, 1));
	}


	// on ajoute 7 types de tuiles
	protected void initStock(){
		super.initStock();
		String path = "img/tiles/CathInn/";
		stockAdd(TileFactory.getInstance().createTile(path, "A.png", 6));
		stockAdd(TileFactory.getInstance().createTile(path, "B.png", 2));
		stockAdd(TileFactory.getInstance().createTile(path, "C.png", 2));
		stockAdd(TileFactory.getInstance().createTile(path, "D.png", 2));
		stockAdd(TileFactory.getInstance().createTile(path, "F.png", 2));
		stockAdd(TileFactory.getInstance().createTile(path, "F+.png", 2));
		stockAdd(TileFactory.getInstance().createTile(path, "G.png", 2));
	}

	

	/*
	 * comme on considere des elements completes si y a 
	 * une cathe dans la ville
	 * ou 
	 * une auberge sur une route
	 * alors les joueurs gagnent 1 pt/tuile en plus
	 */
	@Override
	public void majScoreTour() {
		boolean hasbonus=false;
		for (Element  elt : elementsCompleted) {
			if (elt.getType() == Tile.castle){
				for (Tile tuile : elt.getEnsTile()) {
					if (tuile.getCenter() == TileAubCath.cathedral) hasbonus=true;
				}
			}
			if (elt.getType() == Tile.street){
				for (Tile tuile : elt.getEnsTile()) {
					if (tuile.getCenter() == TileAubCath.inn) hasbonus=true; 
				}
			}
			if (hasbonus) scoreJoueurs((elt.getScoreDonneInComplete()+elt.getEnsTile().size()), elt.getChemin());
			else scoreJoueurs(elt.getScoreDonneInComplete(), elt.getChemin());
			//les joueurs recuperent tous les pions de chacun des elements completes
			for (Tile t : elt.getEnsTileContentPawn(table)) {
				Pawn pose =t.getPionPose(); 
				pose.getJoueur().recupPion(pose,t);
			}
		}
	}
	
	/*
	 * comme on considere des elements non completes si y a 
	 * une cathe dans la ville
	 * ou 
	 * une auberge sur une route
	 * alors les joueurs gagnent rien
	 */

	@Override
	public void majScoreFinal() {
			for (Element element : elementsCompleted) {
				boolean hasbonus=false;
				if (element.getType() == Tile.castle){
					for (Tile tuile : element.getEnsTile()) {
						if (tuile.getCenter() == TileAubCath.cathedral) hasbonus=true;
					}
				}
				if (element.getType() == Tile.street){
					for (Tile tuile : element.getEnsTile()) {
						if (tuile.getCenter() == TileAubCath.inn) hasbonus=true; 
					}
				}
				if (!hasbonus) scoreJoueurs(element.getScoreDonneInComplete(), element.getChemin());
				//sinon on met pas a jour : ils ont 0 
			}
	}
	
	//ajouté
	@Override
	public void scoreJoueurs(int score, Vector<Point3D> chemin) 
	{
		
	}
}
